# @File     : baidu_news_info.py
# @function : 提取百度新闻的标题、网址、日期和来源-并保存到excel文件
# @Software : PyCharm Community Edition，谷歌Chrome浏览器
# @Knowledge: requests、正则表达式、pandas
"""
import requests
import re
import pandas as pd


# 补全代码：使用requests获取网站返回的源码

# 正则表达式提取内容:标题，网址，日期，来源
def get_news_title():
    # 正则表达式提取内容:标题
    # 补全代码
    pass


def get_news_href():
    # 正则表达式提取内容:网址
    # 补全代码
    pass


def get_news_date():
    # 正则表达式提取内容:日期
    # 补全代码
    pass


def get_news_source():
    # 正则表达式提取内容:来源
    # 补全代码
    pass


if __name__ == "__main__":
    # 补全代码：打印输出新闻列表，包括的字段为：序号，“.”分隔符，标题，日期，来源，网址
    pass

    # 补全代码：将新闻列表信息保存到excel文件，excel文件的表头为“标题，日期，来源，网址”，文件名自拟
    pass
"""
import requests
import re
import pandas as pd
from bs4 import BeautifulSoup
# 补全代码：使用requests获取网站返回的源码
def get_html(url):
    respsonse=requests.get(url)
    if respsonse.status_code==200:
        soup=BeautifulSoup(respsonse.content.decode("utf-8"),'html.parser')
        return soup

    else:
        print(f"fetch content error.{respsonse.status_code}")
        return None

# 正则表达式提取内容:标题，网址，日期，来源
def get_news_title(html):
    # 补全代码
    titles=[]
    titles_tag=html.find_all("h3",class_="news-title_1YtI1")
    for tag in titles_tag:
        titles.append(tag.get_text())
   # print(titles)
    return titles

def get_news_href(html):
    # 补全代码
    news_href=[]
    news_href_tags=html.find_all("a",class_="news-title-font_1xS-F")
    for tag in news_href_tags:
        href=tag.attrs["href"]
        news_href.append(href)
    #print(news_href)
    return news_href


def get_news_date(html):
    # 补全代码
    news_dates=[]
    news_dates_tag=html.find_all("span",class_="c-color-gray2 c-font-normal c-gap-right-xsmall")
    for tag in news_dates_tag:
        news_dates.append(tag.get_text())
    #print(news_dates)
    return news_dates


def get_news_source(html):
    # 补全代码
    news_source = []
    news_source_tag = html.find_all("span", class_="c-color-gray")
    for tag in news_source_tag:
        news_source.append(tag.get_text())
    #print(news_source)
    return news_source

if __name__ == "__main__":
    # 补全代码：指定百度新闻的URL
    baidu_news_url = "http://localhost:8080/baidu/百度资讯搜索_阿里巴巴.html"
    # 补全代码：获取网页源码
    html_content = get_html(baidu_news_url)

    if html_content:
        # 补全代码：使用正则表达式提取标题、网址、日期和来源
        titles = get_news_title(html_content)
        hrefs = get_news_href(html_content)
        dates = get_news_date(html_content)
        sources = get_news_source(html_content)
        results=list(zip(titles,hrefs,dates,sources))
        #print(results)

        for idx, result in enumerate(results,start=1):
            print(f"{idx}.{result[0]}({result[2]}'-'{result[3]})")
            print(result[1])

        news_df=pd.DataFrame({'标题':titles,'网址':sources,'来源':hrefs,'日期':dates})
        news_df.to_excel("baidu_news_info.xlsx",index=False)
"""
        # 补全代码：创建DataFrame，存储提取的信息
        news_df = pd.DataFrame({
            '标题': titles,
            '日期': dates,
            '来源': sources,
            '网址': hrefs
        })
        
        # 补全代码：打印输出新闻列表
        for i, (title, date, source, href) in enumerate(zip(titles, dates, sources, hrefs), 1):
            print(f"{i}. {title} - {date} - {source} - {href}")
            

        # 补全代码：将新闻列表信息保存到excel文件
        excel_file_name = "baidu_news_info.xlsx"
        news_df.to_excel(excel_file_name, index=False)
        print(f"\nNews information saved to {excel_file_name}")
"""